Skip to content

Tracking PR for v0.23.0 release#2878

Draft
bobbinth wants to merge 340 commits intomainfrom
next
Draft

Tracking PR for v0.23.0 release#2878
bobbinth wants to merge 340 commits intomainfrom
next

Conversation

@bobbinth
Copy link
Copy Markdown
Contributor

This is a tracking PR for v0.23.0 release

adr1anh and others added 5 commits April 2, 2026 13:28
Integrates upstream changes including:
- TraceStorage refactoring in main_trace.rs
- FRIE2F4 opcode and op flag
- ACE circuit module (air/src/ace.rs)
- Various processor/prover refactoring

Conflict resolutions:
- tagging module: kept deleted (our branch removed tagging)
- stack/crypto/mod.rs: kept deleted (flattened to crypto.rs; FRIE2F4 will be ported in follow-up)
- main_trace.rs: adopted TraceStorage, removed MainTraceRow struct (lives in columns.rs), kept ACE_COL_MAP accessors
- CHANGELOG.md: restored from upstream
Rewrite documentation and variable naming across all four crypto
constraint functions (CRYPTOSTREAM, HORNERBASE, HORNEREXT, FRIE2F4)
to make the constraints understandable without cross-referencing
external docs.

Key changes:
- Add stack layout and helper register maps to every function docstring
- FRIE2F4: reorganize 12 numbered groups into 4 logical phases (domain
  identification, folding parameters, fold4 core, consistency/state)
- FRIE2F4: move output/helper bindings from top-of-function dump to the
  phase that uses them, so variable provenance is always nearby
- FRIE2F4: rename single-letter and ambiguous variables (p → tree_index,
  ev → eval_point, ne → fold_result, f_tau → tau_factor, etc.)
- FRIE2F4: extract fold2_doubled closure to eliminate repeated pattern
- FRIE2F4: add fold2 derivation from even/odd polynomial decomposition
- FRIE2F4: document bit-reversal mapping between stack order and fold4
  natural order
- Add QuadFeltExpr::double() method to ext_field module

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GitHub did not report trusted authors in a stable way on pull requests. Some Miden team members showed up as CONTRIBUTORS, so role checks could not tell team PRs from outside PRs. That pushed the workflow to skip too much.\n\nThis change uses the author's repo permission instead. The workflow now skips only authors with admin, maintain, or write access.
…nel gh-pages push (#2916)

The repo had two different ideas of how GitHub Pages was being published. The rustdoc job was updating a gh-pages branch, while the repo also had a Pages workflow that deployed a separate site artifact. That split makes /docs easy to populate in the branch while the live site continues serving something else entirely.

This change makes docs.yml build the complete Pages payload itself: the root page redirects to docs.miden.xyz/miden-vm/ and the generated rustdoc is placed at /docs/. It also removes the older manual redirect-only workflow so there is a single authoritative publisher for the Pages site.

Operationally, this only works as intended when the repository Pages source is configured to use GitHub Actions rather than Deploy from a branch. Once that setting is aligned, the workflow output and the public site should finally match.
…EAD procedures (#2835) (#2941)

Add doc comments warning that source and destination memory ranges must
not overlap for memcopy_words, memcopy_elements, encrypt, and decrypt.

Add runtime overlap assertions to all four procedures that panic with a
clear error message when ranges overlap.

Add unhappy-path tests verifying the overlap guards reject overlapping
ranges for all four procedures.

Update auto-generated docs (mem.md, crypto/aead.md).

Co-authored-by: François Garillot <4142+huitseeker@users.noreply.github.com>
* Use precompile request digest in trace binding

* Refactor trace inputs for prove-from-trace

* Strengthen prove-from-trace integration coverage

* Tighten trace proving helper APIs

* chore: Changelog

* Document trace build inputs test helpers

* Follow trace replay review feedback

* Add recursive precompile verifier coverage
adr1anh and others added 7 commits April 4, 2026 14:01
Add domain separation to bus message encodings so that messages from
different buses are always distinct, even when they share the same
coefficient layout. Each bus type gets a unique prefix:
  bus_prefix[bus] = alpha + (bus+1) * beta^MAX_MESSAGE_WIDTH

This aligns the ACE boundary check circuit (ace.rs) and the MASM
recursive verifier (public_inputs.masm, reduce_kernel_digests) with
the symbolic constraint encoding in Challenges::encode.

Also:
- Automate regeneration of all circuit-derived files (constraints_eval.masm,
  mod.masm RELATION_DIGEST, config.rs RELATION_DIGEST) from a single
  ignored test: `regenerate_ace_circuit_data`.
- Add insta snapshot test for relation digest in miden-air.
- Fix VLPI test reference to use bus_prefix instead of bare alpha.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduce `AceDag::compact()` which removes nodes unreachable from the
root after constant folding, then remaps all NodeId references to
maintain contiguous indices. Called after DAG construction in both the
AIR and codegen lowering paths, producing a smaller circuit commitment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Column layout types (MainCols, DecoderCols, StackCols, etc.) are used
exclusively by AIR constraint code, not by the processor's trace
generation. Moving them into the constraints module eliminates ~1100
lines of diff in the trace directory against origin/next, keeping only
genuine functional changes (bus domain separation in challenges.rs and
bus_types constants).

Column structs are colocated with their constraint modules:
- constraints/columns.rs: MainCols, AuxCols, col maps
- constraints/{system,decoder,stack,range}/columns.rs: per-module cols
- constraints/chiplets/columns.rs: all chiplet cols + periodic cols

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove the unsafe `impl Index<usize>` hacks from DecoderCols, StackCols,
and RangeCols. All indexed access is replaced with safe alternatives:

- StackCols: new `get(idx)` and `elements(range)` methods replace `stack[i]`
- DecoderCols: all access via named fields (`.addr`, `.hasher_state[i]`,
  `.batch_flags[i]`, `.user_op_helpers()`, `.end_block_flags()`)
- RangeCols: Index impl deleted (zero usage)

Also:
- Rename MainTraceRow to MainCols everywhere (145 sites, 32 files)
- Add named NUM_*_COLS size constants for all column structs
- Delete decoder_cols/op_group_cols/stack_cols local constant modules

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Merge chiplets/bus/chiplets/{mod.rs, requests.rs, responses.rs} back
into a single chiplets/bus/chiplets.rs so the diff against origin/next
shows as an in-place edit rather than a full delete + 3 new files.

Restore old helper function names (compute_call_request, compute_end_request,
compute_ace_request, compute_hasher_message, etc.) to further minimize
the diff against the merge base.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ations (#2939)

Co-authored-by: François Garillot <4142+huitseeker@users.noreply.github.com>
* perf: make get_divisors return a fixed size Vec

* chore: update CHANGELOG.md

---------

Co-authored-by: François Garillot <4142+huitseeker@users.noreply.github.com>
bitwalker and others added 7 commits April 7, 2026 09:49
Update MAST package structure for project assembly
processor: expose advice, memory and transcript
Keep runtime dependencies from preassembled packages in dependency resolution.
Programs that declare a kernel now require the matching kernel package when they are rebuilt.
The resolver prefers the stored kernel, falls back to a matching embedded kernel, and rejects bad or conflicting embedded kernel metadata.
Preassembled packages still need their runtime dependencies during resolution. Programs that need a kernel now fail when that kernel cannot be resolved, instead of silently falling back to embedded metadata during dependency selection.
bitwalker and others added 11 commits May 5, 2026 11:11
* Require acquiring a lock on the index file handle in order to
  read/write the index. This protects against simultaneous writes
  of the index from multiple instances of the `miden-registry` process.
* Do not update the in-memory registry index until the package artifact
  has been written to the local package store. This protects against
  the index and the store getting out of sync due to an error writing
  the artifact.
Store local artifacts with package-qualified names, while still loading legacy digest-only artifacts when they match the requested package.

Use the same validated legacy fallback for package summaries, loading, and public artifact path lookup.
Use the package cache for dependency artifacts instead of publishing them.

Repair unreadable exact cache entries, skip cache writes on semantic version collisions, and avoid repairing exact artifacts that are already readable.

Closes #2946.
Reject duplicate publishes before artifact writes, perform publish and cache writes under the index lock, and roll back staged index updates when writes fail.
Re-read cache artifacts while holding the index lock before repair writes.

Check validated legacy artifacts before writing or replacing package-qualified cache artifacts, including corrupt qualified artifacts.
…ersistence

Fix local registry persistence
Picks one tuple ordering and applies it everywhere per Al-Kindi's review
recipe (#2962#pullrequestreview-4210798855):

- Rename `Deg::{n,d}` → `Deg::{v,u}` so field order matches the V-first
  prose convention.
- Sweep prose `(U, V)` / `(U_g, V_g)` / `(U_col, V_col)` → V-first
  variants across `air/src/lookup/*` and one processor test, including
  flipping the storage layout of `DebugTraceState::column_folds` and
  the algebra in the cached-encoding-equivalence check
  (`V_c·U_e − V_e·U_c`).
- Replace pre-flag batch-outer `Deg` with the post-flag (V, U)
  contribution to (V_g, U_g) at all 21 batch sites + inline
  `// (V, U) = (V_pre + deg(f), U_pre + deg(f))` annotation.
- Rewrite the `Deg` struct docstring to spell out the rename, the V-first
  ordering, and the three semantic call sites (single interaction,
  batch outer, group/column scope).

A broader follow-up is planned to split `Deg` into per-level types
(`InteractionDeg` carrying `(deg_m, deg_v, deg_f)`; `BatchDeg` carrying
`(v, u, deg_f)` for pre-flag (N, D); `GroupDeg` and `ColumnDeg` carrying
post-flag `(v, u)` totals) so each annotation is self-contained and the
validator can specialize per scope. Out of scope for this commit.

Resolves PR #2962 review comments r3172841899, r3173143736, r3173177827,
r3173358177, r3173377256, r3173359698.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* update smt with domain separation

* hash_words reuse, remove useless comments

* further simplify comments

* build docs

* Finalize miden-crypto 0.25.0 integration

* Use released midenc-hir-type 0.6.1

* Update changelog PR reference

* Fix hash_words docs word count

* Fix merge_in_domain docs order

---------

Co-authored-by: Grzegorz Świrski <grzegorz@swirski.name>
adr1anh and others added 3 commits May 5, 2026 17:40
Conflict in processor/src/trace/tests/decoder.rs: origin/next still had
the old aux-trace P1/P2/P3 tests; our branch replaced them with the new
LogUp interaction harness. Kept our version and ported the two new DYNCALL
regression tests added by origin/next (PR #2904).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- messages.rs: replace manual `bp[i]*field` lines with `inner_product_at`
  in HasherMsg, MemoryMsg, BlockStackMsg, and SiblingMsg encoders
- chiplet_responses.rs: extract `full_state` / `full_rate` local helpers
  so sponge_start, sponge_respan, and sout share the assembly expression
- hasher.rs test: match on `bool` selector bits instead of u8; add `as_bit`
  helper that returns None for non-binary values so malformed selectors
  skip the row rather than silently aliasing to a valid response kind

(nits 2 and 4 were already addressed: control_remove closure and
next_op_first_child_flag helper both existed before this commit)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@adr1anh adr1anh temporarily deployed to github-pages May 6, 2026 09:02 — with GitHub Actions Inactive
* fix(project): narrow build provenance inputs

* fix(assembly): reject private cross-module imports

* fix(assembly): count signature type imports

* chore: CHANGELOG
huitseeker and others added 2 commits May 6, 2026 14:09
* docs(processor): fix memory trace delta encoding comment

* docs(processor): fix stale ZERO delta comments in append_range_checks and fill_trace

Both methods had inline comments claiming the clock adjustment made the
first-row delta "end up being ZERO". The delta is actually 1 (prev_clk
is set to first_clk - 1), matching the struct-level doc already corrected
in the previous commit. Also fixes the "pervious" typo in fill_trace.

* chore: CHANGELOG

---------

Co-authored-by: François Garillot <francois@garillot.net>
* sorted_array bounds check

* changelog

* simplify tests

* explicit bounds check

* feedback

* chore: address comments

* chore: addressing comments

* chore: align `sorted_array` invariant messages

---------

Co-authored-by: krushimir <189111540+krushimir@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.